home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.internal;
-
- import com.ibm.xml.framework.ChunkyCharArray;
- import com.ibm.xml.framework.ParserState;
- import com.ibm.xml.framework.ScanContentState;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.XMLDocumentHandler;
- import com.ibm.xml.framework.XMLErrorHandler;
- import com.ibm.xml.framework.XMLReader;
- import com.ibm.xml.framework.XMLScanner;
- import java.io.InputStream;
-
- final class UTF8Reader extends XMLReader {
- protected static final int CHUNK_SHIFT = 14;
- protected static final int CHUNK_SIZE = 16384;
- protected static final int CHUNK_MASK = 16383;
- protected char[] fCharacters = new char[256];
- protected int fCharDataLength;
- protected XMLScanner fScanner;
- protected StringPool fStringPool;
- protected XMLDocumentHandler fDocumentHandler;
- protected boolean fSendCharDataAsCharArray = false;
- protected XMLErrorHandler fErrorHandler;
- protected InputStream fInputStream;
- protected UTF8DataChunk fCurrentChunk;
- protected int fCurrentIndex;
- protected byte[] fMostRecentData;
- protected int fMostRecentByte;
- protected int fLength;
- protected boolean fCheckOverflow = false;
- protected byte[] fOverflow;
- protected int fOverflowOffset;
- protected int fOverflowEnd;
- protected boolean fSkipLinefeed = false;
- protected int fPartialMultiByteIn;
- protected byte[] fPartialMultiByteChar = new byte[4];
- protected boolean fPartialMultiByteResult = false;
- protected int fFastCopyCount;
- protected int fOutputOffset;
- protected int fPartialMultiByteOut;
-
- UTF8Reader(ParserState var1, String var2, String var3, InputStream var4) throws Exception {
- super(var1, var2, var3);
- this.fInputStream = var4;
- this.fScanner = var1.getScanner();
- this.fStringPool = var1.cacheStringPool();
- this.fDocumentHandler = var1.getDocumentHandler();
- this.fSendCharDataAsCharArray = this.fDocumentHandler != null && this.fDocumentHandler.sendCharDataAsCharArray();
- this.fErrorHandler = var1.getErrorHandler();
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, (UTF8DataChunk)null);
- this.fillCurrentChunk();
- }
-
- public int addString(int var1, int var2) {
- return var2 == 0 ? 0 : this.fCurrentChunk.addString(var1, var2);
- }
-
- public int addSymbol(int var1, int var2) {
- return var2 == 0 ? 0 : this.fCurrentChunk.addSymbol(var1, var2, 0);
- }
-
- protected int addSymbol(int var1, int var2, int var3) {
- return this.fCurrentChunk.addSymbol(var1, var2, var3);
- }
-
- public void append(ChunkyCharArray var1, int var2, int var3) {
- this.fCurrentChunk.append(var1, var2, var3);
- }
-
- protected int slowLoadNextByte() throws Exception {
- if (this.fCurrentChunk.nextChunk() != null) {
- this.fCurrentChunk = this.fCurrentChunk.nextChunk();
- this.fCurrentIndex = 0;
- this.fMostRecentData = this.fCurrentChunk.toByteArray();
- return this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- } else {
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- return this.fillCurrentChunk();
- }
- }
-
- protected int loadNextByte() throws Exception {
- ++super.fCurrentOffset;
- return ++this.fCurrentIndex == 16384 ? this.slowLoadNextByte() : (this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255);
- }
-
- protected void checkEOF(int var1) {
- if (var1 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- protected void skipOneCharStartingWithByte(int var1) throws Exception {
- if ((128 & var1) == 0) {
- if (var1 == 0) {
- int var2 = super.fCurrentOffset + 1;
- if (var2 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- } else {
- ++super.fCharacterCounter;
- }
- } else if (var1 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
- } else {
- ++super.fCharacterCounter;
- this.loadNextByte();
- if ((224 & var1) != 192) {
- this.loadNextByte();
- if ((240 & var1) != 224) {
- this.loadNextByte();
- }
- }
- }
- }
-
- public int skipOneChar() throws Exception {
- int var1 = this.fMostRecentByte;
- this.skipOneCharStartingWithByte(var1);
- this.loadNextByte();
- return super.fCurrentOffset;
- }
-
- public int skipAsciiChar() throws Exception {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return super.fCurrentOffset;
- }
-
- public int skipToChar(char var1) throws Exception {
- for(int var2 = this.fMostRecentByte; var2 != var1; var2 = this.loadNextByte()) {
- this.skipOneCharStartingWithByte(var2);
- }
-
- return super.fCurrentOffset;
- }
-
- public int skipPastChar(char var1) throws Exception {
- for(int var2 = this.fMostRecentByte; var2 != var1; var2 = this.loadNextByte()) {
- this.skipOneCharStartingWithByte(var2);
- }
-
- ++super.fCharacterCounter;
- this.loadNextByte();
- return super.fCurrentOffset;
- }
-
- public boolean skippedValidChar() throws Exception {
- int var1 = this.fMostRecentByte;
- if ((128 & var1) == 0) {
- if (var1 < 32 && var1 != 9) {
- if (var1 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- this.loadNextByte();
- return true;
- } else {
- if (var1 == 0) {
- int var7 = super.fCurrentOffset + 1;
- if (var7 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- return false;
- }
- } else {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return true;
- }
- } else {
- UTF8DataChunk var2 = this.fCurrentChunk;
- int var3 = this.fCurrentIndex;
- int var4 = super.fCurrentOffset;
- int var5 = this.loadNextByte();
- if ((224 & var1) == 192) {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return true;
- } else {
- int var6 = this.loadNextByte();
- if ((240 & var1) == 224) {
- if (var1 == 237 && var5 >= 160 || var1 == 239 && var5 == 191 && var6 >= 190) {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var3;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- } else {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return true;
- }
- } else {
- this.loadNextByte();
- if (var1 > 244 || var1 == 244 && var5 >= 144) {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var3;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- } else {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return true;
- }
- }
- }
- }
- }
-
- public boolean lookingAtValidChar() throws Exception {
- int var1 = this.fMostRecentByte;
- if ((128 & var1) == 0) {
- if (var1 < 32 && var1 != 9 && var1 != 10) {
- if (var1 == 0) {
- int var7 = super.fCurrentOffset + 1;
- if (var7 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- return false;
- } else {
- return true;
- }
- } else {
- UTF8DataChunk var2 = this.fCurrentChunk;
- int var3 = this.fCurrentIndex;
- int var4 = super.fCurrentOffset;
- int var5 = this.loadNextByte();
- if ((224 & var1) == 192) {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var3;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return true;
- } else {
- int var6 = this.loadNextByte();
- if ((240 & var1) == 224) {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var3;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return (var1 != 237 || var5 < 160) && (var1 != 239 || var5 != 191 || var6 < 190);
- } else {
- this.loadNextByte();
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var3;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return var1 <= 244 && (var1 != 244 || var5 < 144);
- }
- }
- }
- }
-
- public int skipInvalidChar(int var1) throws Exception {
- int var3 = this.fMostRecentByte;
- ++super.fCharacterCounter;
- int var2;
- if ((var3 & 128) == 0) {
- var2 = var3;
- } else {
- int var4 = this.loadNextByte();
- if ((224 & var3) == 192) {
- var2 = ((31 & var3) << 6) + (63 & var4);
- } else {
- int var5 = this.loadNextByte();
- if ((240 & var3) == 224) {
- var2 = ((15 & var3) << 12) + ((63 & var4) << 6) + (63 & var5);
- } else {
- int var6 = this.loadNextByte();
- var2 = ((15 & var3) << 18) + ((63 & var4) << 12) + ((63 & var5) << 6) + (63 & var6);
- }
- }
- }
-
- switch (var1) {
- case 43:
- String var9 = (new Character((char)var2)).toString();
- String var10 = Integer.toHexString(var2);
- this.fErrorHandler.error2(var1, this.fStringPool.addString(var9), this.fStringPool.addString(var10));
- break;
- case 63:
- case 85:
- String var8 = Integer.toHexString(var2);
- this.fErrorHandler.error1(var1, this.fStringPool.addString(var8));
- break;
- case 80:
- case 82:
- case 110:
- String var7 = (new Character((char)var2)).toString();
- this.fErrorHandler.error1(var1, this.fStringPool.addString(var7));
- }
-
- this.loadNextByte();
- return super.fCurrentOffset;
- }
-
- public boolean skippedChar(char var1) throws Exception {
- int var2 = this.fMostRecentByte;
- if (var2 != var1) {
- return false;
- } else {
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- return true;
- }
- }
-
- public boolean lookingAtChar(char var1) {
- int var2 = this.fMostRecentByte;
- return var2 == var1;
- }
-
- public boolean skippedSpace() throws Exception {
- int var1 = this.fMostRecentByte;
- if (var1 > 32) {
- return false;
- } else {
- if (var1 != 32 && var1 != 9) {
- if (var1 != 10) {
- return false;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
-
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- return true;
- }
- }
-
- public boolean lookingAtSpace() {
- int var1 = this.fMostRecentByte;
- return var1 == 32 || var1 == 9 || var1 == 10;
- }
-
- public int skipPastSpaces() throws Exception {
- int var1 = this.fMostRecentByte;
-
- while(true) {
- if (var1 != 32 && var1 != 9) {
- if (var1 != 10) {
- return super.fCurrentOffset;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
-
- var1 = this.loadNextByte();
- }
- }
-
- public int skipDecimalDigit() throws Exception {
- int var1 = this.fMostRecentByte;
- if (var1 >= 48 && var1 <= 57) {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return var1 - 48;
- } else {
- return -1;
- }
- }
-
- public int skipHexDigit() throws Exception {
- int var1 = this.fMostRecentByte;
- if (var1 <= 102 && XMLReader.fgAsciiXDigitChar[var1] != 0) {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return var1 - (var1 < 65 ? 48 : (var1 < 97 ? 65 : 97) - 10);
- } else {
- return -1;
- }
- }
-
- public boolean skippedAlpha() throws Exception {
- int var1 = this.fMostRecentByte;
- if (var1 <= 122 && XMLReader.fgAsciiAlphaChar[var1] != 0) {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return true;
- } else {
- return false;
- }
- }
-
- protected final boolean skippedAsciiCharWithFlag(byte var1) throws Exception {
- int var2 = this.fMostRecentByte;
- if ((var2 & 128) == 0 && (XMLReader.fgCharFlags[var2] & var1) != 0) {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return true;
- } else {
- return false;
- }
- }
-
- public final boolean skippedVersionNum() throws Exception {
- return this.skippedAsciiCharWithFlag((byte)1);
- }
-
- public final boolean skippedEncName() throws Exception {
- return this.skippedAsciiCharWithFlag((byte)2);
- }
-
- public final boolean skippedPubidChar() throws Exception {
- int var1 = this.fMostRecentByte;
- if ((var1 & 128) != 0) {
- return false;
- } else if ((XMLReader.fgCharFlags[var1] & 4) != 0) {
- ++super.fCharacterCounter;
- this.loadNextByte();
- return true;
- } else if (var1 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- this.loadNextByte();
- return true;
- } else {
- return false;
- }
- }
-
- public boolean skippedString(char[] var1) throws Exception {
- int var2 = var1.length;
- byte[] var3 = this.fMostRecentData;
- int var4 = this.fCurrentIndex;
- if (var4 + var2 <= 16384) {
- for(int var11 = 0; var11 < var2; ++var11) {
- if (var3[var4++] != var1[var11]) {
- return false;
- }
- }
-
- super.fCharacterCounter += var2;
- super.fCurrentOffset += var2;
- this.fCurrentIndex = var4;
- if (var4 == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = var3[var4] & 255;
- }
-
- return true;
- } else {
- UTF8DataChunk var5 = this.fCurrentChunk;
- int var6 = super.fCurrentOffset;
- int var7 = var4;
- int var8 = 0;
-
- while(var4 < 16384) {
- if (var3[var4++] != var1[var8++]) {
- return false;
- }
- }
-
- this.slowLoadNextByte();
- var3 = this.fMostRecentData;
- var4 = 0;
-
- while(var8 < var2) {
- if (var3[var4++] != var1[var8++]) {
- this.fCurrentChunk = var5;
- this.fCurrentIndex = var7;
- super.fCurrentOffset = var6;
- this.fMostRecentData = var5.toByteArray();
- this.fMostRecentByte = this.fMostRecentData[var7] & 255;
- return false;
- }
- }
-
- super.fCharacterCounter += var2;
- super.fCurrentOffset += var2;
- this.fCurrentIndex = var4;
- if (var4 == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = var3[var4] & 255;
- }
-
- return true;
- }
- }
-
- public int scanName(char var1, int var2) throws Exception {
- int var3 = super.fCurrentOffset;
- byte[] var4 = this.fMostRecentData;
- int var5 = this.fMostRecentByte;
- int var6;
- if ((var5 & 128) == 0) {
- if (XMLReader.fgAsciiInitialNameChar[var5] == 0) {
- return -1;
- }
-
- var6 = var5;
- } else {
- UTF8DataChunk var7 = this.fCurrentChunk;
- int var8 = this.fCurrentIndex;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var4 = this.fMostRecentData;
- }
-
- int var9 = var4[this.fCurrentIndex] & 255;
- if ((224 & var5) == 192) {
- var6 = ((31 & var5) << 6) + (63 & var9);
- if ((XMLReader.fgCharFlags[var6] & 16) == 0) {
- this.fCurrentChunk = var7;
- this.fCurrentIndex = var8;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var7.toByteArray();
- this.fMostRecentByte = var5;
- return -1;
- }
- } else {
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var4 = this.fMostRecentData;
- }
-
- int var10 = var4[this.fCurrentIndex] & 255;
- if ((240 & var5) != 224) {
- this.fCurrentChunk = var7;
- this.fCurrentIndex = var8;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var7.toByteArray();
- this.fMostRecentByte = var5;
- return -1;
- }
-
- if (var5 == 237 && var9 >= 160 || var5 == 239 && var9 == 191 && var10 >= 190) {
- this.fCurrentChunk = var7;
- this.fCurrentIndex = var8;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var7.toByteArray();
- this.fMostRecentByte = var5;
- return -1;
- }
-
- var6 = ((15 & var5) << 12) + ((63 & var9) << 6) + (63 & var10);
- if ((XMLReader.fgCharFlags[var6] & 16) == 0) {
- this.fCurrentChunk = var7;
- this.fCurrentIndex = var8;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var7.toByteArray();
- this.fMostRecentByte = var5;
- return -1;
- }
- }
- }
-
- int var15 = 0;
- int var17 = 0;
-
- while(true) {
- var15 = StringHasher.hashChar(var15, var17++, var6);
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var4 = this.fMostRecentData;
- }
-
- var5 = var4[this.fCurrentIndex] & 255;
- if (var1 == var5) {
- break;
- }
-
- if ((var5 & 128) == 0) {
- if (XMLReader.fgAsciiNameChar[var5] == 0) {
- break;
- }
-
- var6 = var5;
- } else {
- UTF8DataChunk var18 = this.fCurrentChunk;
- int var20 = super.fCurrentOffset;
- int var11 = this.fCurrentIndex;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var4 = this.fMostRecentData;
- }
-
- int var12 = var4[this.fCurrentIndex] & 255;
- if ((224 & var5) == 192) {
- var6 = ((31 & var5) << 6) + (63 & var12);
- if ((XMLReader.fgCharFlags[var6] & 32) == 0) {
- this.fCurrentChunk = var18;
- this.fCurrentIndex = var11;
- super.fCurrentOffset = var20;
- this.fMostRecentData = var18.toByteArray();
- break;
- }
- } else {
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var4 = this.fMostRecentData;
- }
-
- int var13 = var4[this.fCurrentIndex] & 255;
- if ((240 & var5) != 224) {
- this.fCurrentChunk = var18;
- this.fCurrentIndex = var11;
- super.fCurrentOffset = var20;
- this.fMostRecentData = var18.toByteArray();
- break;
- }
-
- if ((var5 != 237 || var12 < 160) && (var5 != 239 || var12 != 191 || var13 < 190)) {
- var6 = ((15 & var5) << 12) + ((63 & var12) << 6) + (63 & var13);
- if ((XMLReader.fgCharFlags[var6] & 32) != 0) {
- continue;
- }
-
- this.fCurrentChunk = var18;
- this.fCurrentIndex = var11;
- super.fCurrentOffset = var20;
- this.fMostRecentData = var18.toByteArray();
- break;
- }
-
- this.fCurrentChunk = var18;
- this.fCurrentIndex = var11;
- super.fCurrentOffset = var20;
- this.fMostRecentData = var18.toByteArray();
- break;
- }
- }
- }
-
- this.fMostRecentByte = var5;
- var15 = StringHasher.finishHash(var15);
- int var19 = super.fCurrentOffset - var3;
- int var21 = this.fCurrentChunk.addSymbol(var3, var19, var15);
- if (var2 != -1 && var2 != var21) {
- return -1;
- } else {
- return var21;
- }
- }
-
- protected boolean skippedMultiByteCharWithFlag(int var1, int var2) throws Exception {
- UTF8DataChunk var3 = this.fCurrentChunk;
- int var4 = super.fCurrentOffset;
- int var5 = this.fCurrentIndex;
- int var6 = this.loadNextByte();
- if ((224 & var1) == 192) {
- if ((XMLReader.fgCharFlags[((31 & var1) << 6) + (63 & var6)] & var2) == 0) {
- this.fCurrentChunk = var3;
- this.fCurrentIndex = var5;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var3.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- } else {
- return true;
- }
- } else {
- int var7 = this.loadNextByte();
- if ((240 & var1) != 224) {
- this.fCurrentChunk = var3;
- this.fCurrentIndex = var5;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var3.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- } else if ((var1 != 237 || var6 < 160) && (var1 != 239 || var6 != 191 || var7 < 190)) {
- if ((XMLReader.fgCharFlags[((15 & var1) << 12) + ((63 & var6) << 6) + (63 & var7)] & var2) == 0) {
- this.fCurrentChunk = var3;
- this.fCurrentIndex = var5;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var3.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- } else {
- return true;
- }
- } else {
- this.fCurrentChunk = var3;
- this.fCurrentIndex = var5;
- super.fCurrentOffset = var4;
- this.fMostRecentData = var3.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- }
- }
- }
-
- public int skipPastName(char var1) throws Exception {
- int var2 = this.fMostRecentByte;
- if ((var2 & 128) == 0) {
- if (XMLReader.fgAsciiInitialNameChar[var2] == 0) {
- return super.fCurrentOffset;
- }
- } else if (!this.skippedMultiByteCharWithFlag(var2, 16)) {
- return super.fCurrentOffset;
- }
-
- while(true) {
- ++super.fCharacterCounter;
- var2 = this.loadNextByte();
- if (var1 == var2) {
- return super.fCurrentOffset;
- }
-
- if ((var2 & 128) == 0) {
- if (XMLReader.fgAsciiNameChar[var2] == 0) {
- return super.fCurrentOffset;
- }
- } else if (!this.skippedMultiByteCharWithFlag(var2, 32)) {
- return super.fCurrentOffset;
- }
- }
- }
-
- public int skipPastNmtoken(char var1) throws Exception {
- for(int var2 = this.fMostRecentByte; var1 != var2; var2 = this.loadNextByte()) {
- if ((var2 & 128) == 0) {
- if (XMLReader.fgAsciiNameChar[var2] == 0) {
- return super.fCurrentOffset;
- }
- } else if (!this.skippedMultiByteCharWithFlag(var2, 32)) {
- return super.fCurrentOffset;
- }
-
- ++super.fCharacterCounter;
- }
-
- return super.fCurrentOffset;
- }
-
- public int scanContent(ScanContentState var1) throws Exception {
- int var2;
- int var4;
- label326: {
- label343: {
- this.fCurrentChunk.clearPreviousChunk();
- this.fCharDataLength = 0;
- var2 = super.fCurrentOffset;
- int var3 = this.fMostRecentByte;
- if ((var3 & 128) != 0) {
- if (!this.skipMultiByteCharData(var3)) {
- return 4;
- }
- } else {
- switch (XMLReader.fgAsciiWSCharData[var3]) {
- case 0:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
- break;
- case 1:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- if (!var1.inCDSect) {
- return 1;
- }
-
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(60);
- }
- break;
- case 2:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- if (!var1.inCDSect) {
- return 2;
- }
-
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(38);
- }
- break;
- case 3:
- ++super.fCharacterCounter;
- var3 = this.loadNextByte();
- if (var3 != 93) {
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- } else if (this.fCurrentIndex + 1 == 16384) {
- UTF8DataChunk var11 = this.fCurrentChunk;
- int var13 = this.fCurrentIndex;
- int var15 = super.fCurrentOffset;
- if (this.loadNextByte() == 62) {
- break label343;
- }
-
- this.fCurrentChunk = var11;
- this.fCurrentIndex = var13;
- super.fCurrentOffset = var15;
- this.fMostRecentData = var11.toByteArray();
- this.fMostRecentByte = 93;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- } else {
- if (this.fMostRecentData[this.fCurrentIndex + 1] == 62) {
- ++this.fCurrentIndex;
- ++super.fCurrentOffset;
- break label343;
- }
-
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- }
- break;
- case 4:
- return 4;
- case 5:
- do {
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
-
- if (var3 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
-
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- var3 = this.slowLoadNextByte();
- } else {
- var3 = this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
- } while(var3 == 32 || var3 == 9 || var3 == 10);
-
- if ((var3 & 128) == 0) {
- switch (XMLReader.fgAsciiCharData[var3]) {
- case 0:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
- break;
- case 1:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- this.loadNextByte();
- return 25;
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
- break;
- case 2:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- this.loadNextByte();
- return 26;
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
- break;
- case 3:
- var4 = super.fCurrentOffset;
- var3 = this.loadNextByte();
- if (var3 != 93) {
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- } else if (this.fCurrentIndex + 1 == 16384) {
- UTF8DataChunk var5 = this.fCurrentChunk;
- int var6 = this.fCurrentIndex;
- int var7 = super.fCurrentOffset;
- if (this.loadNextByte() == 62) {
- break label326;
- }
-
- this.fCurrentChunk = var5;
- this.fCurrentIndex = var6;
- super.fCurrentOffset = var7;
- this.fMostRecentData = var5.toByteArray();
- this.fMostRecentByte = 93;
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- } else {
- if (this.fMostRecentData[this.fCurrentIndex + 1] == 62) {
- ++this.fCurrentIndex;
- ++super.fCurrentOffset;
- break label326;
- }
-
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- }
- break;
- case 4:
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 28;
- }
- } else if (this.fSendCharDataAsCharArray) {
- if (!this.copyMultiByteCharData(var3)) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- return 28;
- }
- } else if (!this.skipMultiByteCharData(var3)) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 28;
- }
- }
- }
-
- if (this.fSendCharDataAsCharArray) {
- var3 = this.copyAsciiCharData();
- } else {
- var3 = this.skipAsciiCharData();
- }
-
- label275:
- while(true) {
- for(; (var3 & 128) != 0; var3 = this.fMostRecentByte) {
- if (this.fSendCharDataAsCharArray) {
- if (!this.copyMultiByteCharData(var3)) {
- this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- return 12;
- }
- } else if (!this.skipMultiByteCharData(var3)) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 12;
- }
- }
-
- switch (XMLReader.fgAsciiCharData[var3]) {
- case 0:
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
-
- var3 = this.loadNextByte();
- break;
- case 1:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- return 9;
- }
-
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
-
- var3 = this.loadNextByte();
- break;
- case 2:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextByte();
- } else {
- this.fMostRecentByte = this.fMostRecentData[this.fCurrentIndex] & 255;
- }
-
- return 10;
- }
-
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(var3);
- }
-
- var3 = this.loadNextByte();
- break;
- case 3:
- var4 = super.fCurrentOffset;
- var3 = this.loadNextByte();
- if (var3 == 93) {
- if (this.fCurrentIndex + 1 == 16384) {
- UTF8DataChunk var14 = this.fCurrentChunk;
- int var16 = this.fCurrentIndex;
- int var17 = super.fCurrentOffset;
- if (this.loadNextByte() == 62) {
- break label275;
- }
-
- this.fCurrentChunk = var14;
- this.fCurrentIndex = var16;
- super.fCurrentOffset = var17;
- this.fMostRecentData = var14.toByteArray();
- this.fMostRecentByte = 93;
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- } else {
- if (this.fMostRecentData[this.fCurrentIndex + 1] == 62) {
- ++this.fCurrentIndex;
- ++super.fCurrentOffset;
- break label275;
- }
-
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- }
- } else {
- ++super.fCharacterCounter;
- if (this.fSendCharDataAsCharArray) {
- this.appendCharData(93);
- }
- }
- break;
- case 4:
- if (var3 != 10) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 12;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- var3 = this.loadNextByte();
- }
- }
-
- this.loadNextByte();
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var2, var4, var1.inCDSect);
- }
-
- super.fCharacterCounter += 3;
- if (var1.inCDSect) {
- var1.inCDSect = false;
- return this.scanContent(var1);
- }
-
- return 11;
- }
-
- this.loadNextByte();
- super.fCharacterCounter += 2;
- if (var1.inCDSect) {
- var1.inCDSect = false;
- return this.scanContent(var1);
- }
-
- return 3;
- }
-
- this.loadNextByte();
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var2, var4, var1.inCDSect);
- }
-
- super.fCharacterCounter += 3;
- if (var1.inCDSect) {
- var1.inCDSect = false;
- return this.scanContent(var1);
- } else {
- return 27;
- }
- }
-
- protected boolean copyMultiByteCharData(int var1) throws Exception {
- UTF8DataChunk var2 = this.fCurrentChunk;
- int var3 = super.fCurrentOffset;
- int var4 = this.fCurrentIndex;
- int var5 = this.loadNextByte();
- if ((224 & var1) == 192) {
- int var9 = ((31 & var1) << 6) + (63 & var5);
- this.appendCharData(var9);
- return true;
- } else {
- int var6 = this.loadNextByte();
- if ((240 & var1) == 224) {
- if ((var1 != 237 || var5 < 160) && (var1 != 239 || var5 != 191 || var6 < 190)) {
- int var10 = ((15 & var1) << 12) + ((63 & var5) << 6) + (63 & var6);
- this.appendCharData(var10);
- return true;
- } else {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var4;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- }
- } else {
- int var7 = this.loadNextByte();
- if (var1 <= 244 && (var1 != 244 || var5 < 144)) {
- int var8 = ((15 & var1) << 18) + ((63 & var5) << 12) + ((63 & var6) << 6) + (63 & var7);
- if (var8 < 65536) {
- this.appendCharData(var8);
- } else {
- this.appendCharData((var8 - 65536 >> 10) + '\ud800');
- this.appendCharData((var8 - 65536 & 1023) + '\udc00');
- }
-
- return true;
- } else {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var4;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- }
- }
- }
- }
-
- protected boolean skipMultiByteCharData(int var1) throws Exception {
- UTF8DataChunk var2 = this.fCurrentChunk;
- int var3 = super.fCurrentOffset;
- int var4 = this.fCurrentIndex;
- int var5 = this.loadNextByte();
- if ((224 & var1) == 192) {
- return true;
- } else {
- int var6 = this.loadNextByte();
- if ((240 & var1) == 224) {
- if ((var1 != 237 || var5 < 160) && (var1 != 239 || var5 != 191 || var6 < 190)) {
- return true;
- } else {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var4;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- }
- } else {
- this.loadNextByte();
- if (var1 <= 244 && (var1 != 244 || var5 < 144)) {
- return true;
- } else {
- this.fCurrentChunk = var2;
- this.fCurrentIndex = var4;
- super.fCurrentOffset = var3;
- this.fMostRecentData = var2.toByteArray();
- this.fMostRecentByte = var1;
- return false;
- }
- }
- }
- }
-
- protected int copyAsciiCharData() throws Exception {
- int var1 = this.fCharDataLength;
- int var2 = this.fCurrentIndex;
- int var3 = super.fCurrentOffset - var2;
-
- while(true) {
- byte[] var4 = this.fMostRecentData;
-
- while(var2 < 16384) {
- int var5 = 16384;
- int var6 = this.fCharacters.length - 2 - var1;
- int var7 = 16384 - var2;
- if (var6 < var7) {
- if (var6 < 64) {
- char[] var8 = new char[this.fCharacters.length * 2];
- System.arraycopy(this.fCharacters, 0, var8, 0, this.fCharacters.length);
- this.fCharacters = var8;
- var6 = this.fCharacters.length - 2 - var1;
- if (var6 < var7) {
- var5 = var2 + var6;
- }
- } else {
- var5 = var2 + var6;
- }
- }
-
- while(var2 < var5) {
- int var10 = var4[var2] & 255;
- if ((var10 & 128) != 0) {
- super.fCurrentOffset = var3 + var2;
- this.fCurrentIndex = var2;
- this.fMostRecentByte = var10;
- this.fCharDataLength = var1;
- return var10;
- }
-
- if (XMLReader.fgAsciiCharData[var10] != 0) {
- if (var10 != 10) {
- super.fCurrentOffset = var3 + var2;
- this.fCurrentIndex = var2;
- this.fMostRecentByte = var10;
- this.fCharDataLength = var1;
- return var10;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
-
- this.fCharacters[var1++] = (char)var10;
- ++var2;
- }
- }
-
- var3 += var2;
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var2 = 0;
- }
- }
-
- protected int skipAsciiCharData() throws Exception {
- int var1 = this.fCurrentIndex;
- int var2 = super.fCurrentOffset - var1;
-
- while(true) {
- for(byte[] var3 = this.fMostRecentData; var1 < 16384; ++var1) {
- int var4 = var3[var1] & 255;
- if ((var4 & 128) != 0) {
- super.fCurrentOffset = var2 + var1;
- this.fCurrentIndex = var1;
- this.fMostRecentByte = var4;
- return var4;
- }
-
- if (XMLReader.fgAsciiCharData[var4] != 0) {
- if (var4 != 10) {
- super.fCurrentOffset = var2 + var1;
- this.fCurrentIndex = var1;
- this.fMostRecentByte = var4;
- return var4;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
- }
-
- var2 += var1;
- this.fCurrentChunk = new UTF8DataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var1 = 0;
- }
- }
-
- protected void appendCharData(int var1) {
- if (this.fCharacters.length == this.fCharDataLength) {
- char[] var2 = new char[this.fCharacters.length * 2];
- System.arraycopy(this.fCharacters, 0, var2, 0, this.fCharacters.length);
- this.fCharacters = var2;
- }
-
- this.fCharacters[this.fCharDataLength++] = (char)var1;
- }
-
- public void callCharDataHandler(int var1, int var2, boolean var3) throws Exception {
- if (!this.fSendCharDataAsCharArray) {
- int var4 = var2 - var1;
- var4 = var4 == 0 ? 0 : this.fCurrentChunk.addString(var1, var4);
- this.fDocumentHandler.characters(var4, var3);
- } else {
- this.fDocumentHandler.characters(this.fCharacters, 0, this.fCharDataLength, var3);
- }
- }
-
- public void callWSCharDataHandler(int var1, int var2, boolean var3) throws Exception {
- int var4 = super.fParserState.getScanner().getCurrentContentSpecType();
- if (var4 != 4) {
- this.callCharDataHandler(var1, var2, var3);
- } else if (!this.fSendCharDataAsCharArray) {
- int var5 = var2 - var1;
- var5 = var5 == 0 ? 0 : this.fCurrentChunk.addString(var1, var5);
- this.fDocumentHandler.ignorableWhitespace(var5, var3);
- } else {
- this.fDocumentHandler.ignorableWhitespace(this.fCharacters, 0, this.fCharDataLength, var3);
- }
- }
-
- protected int fillCurrentChunk() throws Exception {
- this.fOutputOffset = 0;
- if (this.fCheckOverflow) {
- if (this.fOverflowEnd < 16384) {
- if (this.fOverflowEnd > 0) {
- this.fMostRecentData = new byte[1 + this.fOverflowEnd - this.fOverflowOffset];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- } else {
- this.fMostRecentData = new byte[1];
- }
-
- this.fMostRecentData[this.fOutputOffset] = 0;
- this.fOverflow = null;
- this.fLength += this.fOutputOffset;
- this.fCurrentIndex = 0;
- this.fCurrentChunk.setByteArray(this.fMostRecentData);
- return this.fMostRecentByte = this.fMostRecentData[0];
- }
-
- this.fMostRecentData = new byte[16384];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- this.fCheckOverflow = false;
- } else {
- if (this.fOverflow == null) {
- this.fOverflow = new byte[16384];
- }
-
- this.fMostRecentData = null;
- }
-
- while(true) {
- this.fOverflowOffset = 0;
- this.fOverflowEnd = 0;
- int var1 = 16384;
- int var2 = 0;
-
- do {
- var2 = this.fInputStream.read(this.fOverflow, this.fOverflowEnd, var1);
- if (var2 == -1) {
- this.fInputStream.close();
- this.fInputStream = null;
- if (this.fMostRecentData == null) {
- this.fMostRecentData = new byte[1 + this.fOverflowEnd];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- this.fOverflow = null;
- this.fMostRecentData[this.fOutputOffset] = 0;
- } else {
- boolean var3 = this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- if (var3) {
- if (this.fOverflowEnd == 16384) {
- this.fCheckOverflow = true;
- this.fOverflowOffset = 0;
- this.fOverflowEnd = 0;
- } else {
- this.fOverflow = null;
- this.fMostRecentData[this.fOutputOffset] = 0;
- }
- } else {
- this.fCheckOverflow = true;
- }
- }
- break;
- }
-
- if (var2 > 0) {
- this.fOverflowEnd += var2;
- var1 -= var2;
- }
- } while(var1 > 0);
-
- if (var2 == -1) {
- break;
- }
-
- if (this.fMostRecentData != null) {
- boolean var5 = this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- if (this.fOutputOffset == 16384) {
- if (!var5) {
- this.fCheckOverflow = true;
- }
- break;
- }
- } else {
- this.fMostRecentData = new byte[16384];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- if (this.fOutputOffset == 16384) {
- break;
- }
- }
- }
-
- this.fLength += this.fOutputOffset;
- this.fCurrentIndex = 0;
- this.fCurrentChunk.setByteArray(this.fMostRecentData);
- return this.fMostRecentByte = this.fMostRecentData[0];
- }
-
- protected boolean copyNormalize(byte[] var1, int var2, byte[] var3, int var4) throws Exception {
- int var5 = this.fOverflowEnd;
- int var6 = var3.length;
- if (var2 == var5) {
- return true;
- } else {
- byte var7 = var1[var2];
- if (this.fSkipLinefeed) {
- this.fSkipLinefeed = false;
- if (var7 == 10) {
- ++var2;
- if (var2 == var5) {
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return true;
- }
-
- var7 = var1[var2];
- }
- } else if (this.fPartialMultiByteIn > 0) {
- if (!this.handlePartialMultiByteChar(var7, var1, var2, var5, var3, var4, var6)) {
- return this.fPartialMultiByteResult;
- }
-
- var2 = this.fOverflowOffset;
- var4 = this.fOutputOffset;
- var7 = var1[var2];
- }
-
- while(var4 < var6) {
- int var8 = var5 - var2;
- int var9 = var6 - var4;
- if (var8 > var9) {
- var8 = var9;
- }
-
- ++var2;
-
- do {
- for(; var7 == 13 || (var7 & 128) != 0; ++var2) {
- if (var7 == 13) {
- var3[var4++] = 10;
- if (var2 == var5) {
- this.fSkipLinefeed = true;
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return true;
- }
-
- var7 = var1[var2];
- if (var7 == 10) {
- ++var2;
- if (var2 == var5) {
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return true;
- }
-
- var7 = var1[var2];
- }
-
- if (var4 == var6) {
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return false;
- }
- } else {
- if (!this.handleMultiByteChar(var7, var1, var2, var5, var3, var4, var6)) {
- return this.fPartialMultiByteResult;
- }
-
- var2 = this.fOverflowOffset;
- var4 = this.fOutputOffset;
- var7 = var1[var2];
- }
-
- var8 = var5 - var2;
- var9 = var6 - var4;
- if (var8 > var9) {
- var8 = var9;
- }
- }
-
- do {
- var3[var4++] = var7;
- --var8;
- if (var8 == 0) {
- break;
- }
-
- var7 = var1[var2++];
- } while(var7 != 13 && (var7 & 128) == 0);
- } while(var8 != 0);
-
- if (var2 == var5) {
- break;
- }
- }
-
- boolean var10 = var2 == var5;
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return var10;
- }
- }
-
- protected boolean exitNormalize(int var1, int var2, boolean var3) {
- this.fOverflowOffset = var1;
- this.fOutputOffset = var2;
- return var3;
- }
-
- protected void savePartialMultiByte(int var1, int var2, byte var3, byte var4, byte var5, byte var6) {
- this.fPartialMultiByteIn = var1;
- this.fPartialMultiByteOut = var2;
- --var1;
- this.fPartialMultiByteChar[var1] = var3;
- --var1;
- this.fPartialMultiByteChar[var1] = var4;
- --var1;
- this.fPartialMultiByteChar[var1] = var5;
- --var1;
- this.fPartialMultiByteChar[var1] = var6;
- }
-
- protected void savePartialMultiByte(int var1, int var2, byte var3, byte var4, byte var5) {
- this.fPartialMultiByteIn = var1;
- this.fPartialMultiByteOut = var2;
- --var1;
- this.fPartialMultiByteChar[var1] = var3;
- --var1;
- this.fPartialMultiByteChar[var1] = var4;
- --var1;
- this.fPartialMultiByteChar[var1] = var5;
- }
-
- protected void savePartialMultiByte(int var1, int var2, byte var3, byte var4) {
- this.fPartialMultiByteIn = var1;
- this.fPartialMultiByteOut = var2;
- --var1;
- this.fPartialMultiByteChar[var1] = var3;
- --var1;
- this.fPartialMultiByteChar[var1] = var4;
- }
-
- protected void savePartialMultiByte(int var1, int var2, byte var3) {
- this.fPartialMultiByteIn = var1;
- this.fPartialMultiByteOut = var2;
- --var1;
- this.fPartialMultiByteChar[var1] = var3;
- }
-
- protected boolean handleMultiByteChar(byte var1, byte[] var2, int var3, int var4, byte[] var5, int var6, int var7) throws Exception {
- if (var3 == var4) {
- int var20 = 1;
- this.fPartialMultiByteIn = var20;
- this.fPartialMultiByteOut = 0;
- --var20;
- this.fPartialMultiByteChar[var20] = var1;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- } else {
- byte var8 = var2[var3++];
- if ((var8 & 192) != 128) {
- this.fErrorHandler.error2(57, this.fStringPool.addString(Integer.toHexString(var1)), this.fStringPool.addString(Integer.toHexString(var8)));
- }
-
- if ((var1 & 224) == 192) {
- var5[var6++] = var1;
- if (var6 == var7) {
- this.savePartialMultiByte(2, 1, var8, var1);
- boolean var23 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var23;
- return false;
- }
-
- var5[var6++] = var8;
- if (var3 == var4 || var6 == var7) {
- boolean var22 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var22;
- return false;
- }
- } else {
- if (var3 == var4) {
- this.savePartialMultiByte(2, 0, var8, var1);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- }
-
- byte var9 = var2[var3++];
- if ((var9 & 192) != 128) {
- this.fErrorHandler.error3(58, this.fStringPool.addString(Integer.toHexString(var1)), this.fStringPool.addString(Integer.toHexString(var8)), this.fStringPool.addString(Integer.toHexString(var9)));
- }
-
- if ((var1 & 240) == 224) {
- var5[var6++] = var1;
- if (var6 == var7) {
- this.savePartialMultiByte(3, 1, var9, var8, var1);
- boolean var26 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var26;
- return false;
- }
-
- var5[var6++] = var8;
- if (var6 == var7) {
- this.savePartialMultiByte(3, 2, var9, var8, var1);
- boolean var25 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var25;
- return false;
- }
-
- var5[var6++] = var9;
- if (var3 == var4 || var6 == var7) {
- boolean var24 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var24;
- return false;
- }
- } else {
- if ((var1 & 248) != 240) {
- this.fErrorHandler.error1(56, this.fStringPool.addString(Integer.toHexString(var1)));
- }
-
- if (var3 == var4) {
- this.savePartialMultiByte(3, 0, var9, var8, var1);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- }
-
- byte var10 = var2[var3++];
- if ((var10 & 192) != 128) {
- this.fErrorHandler.error4(59, this.fStringPool.addString(Integer.toHexString(var1)), this.fStringPool.addString(Integer.toHexString(var8)), this.fStringPool.addString(Integer.toHexString(var9)), this.fStringPool.addString(Integer.toHexString(var10)));
- }
-
- var5[var6++] = var1;
- if (var6 == var7) {
- this.savePartialMultiByte(4, 1, var10, var9, var8, var1);
- boolean var29 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var29;
- return false;
- }
-
- var5[var6++] = var8;
- if (var6 == var7) {
- this.savePartialMultiByte(4, 2, var10, var9, var8, var1);
- boolean var28 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var28;
- return false;
- }
-
- var5[var6++] = var9;
- if (var6 == var7) {
- this.savePartialMultiByte(4, 3, var10, var9, var8, var1);
- boolean var27 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var27;
- return false;
- }
-
- var5[var6++] = var10;
- if (var3 == var4 || var6 == var7) {
- boolean var11 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var11;
- return false;
- }
- }
- }
-
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- return true;
- }
- }
-
- protected boolean handlePartialMultiByteChar(byte var1, byte[] var2, int var3, int var4, byte[] var5, int var6, int var7) throws Exception {
- if (var6 == var7) {
- boolean var16 = var3 == var4;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = var16;
- return false;
- } else {
- int var8 = this.fPartialMultiByteIn;
- int var9 = this.fPartialMultiByteOut;
- this.fPartialMultiByteIn = 0;
- this.fPartialMultiByteOut = 0;
- byte var10 = 0;
- byte var11 = 0;
- byte var12 = 0;
- boolean var13 = false;
- switch (var8) {
- case 1:
- var10 = var1;
- break;
- case 2:
- var11 = var1;
- break;
- case 3:
- var12 = var1;
- case 4:
- }
-
- int var14 = var8;
- switch (var8) {
- case 4:
- var14 = var8 - 1;
- var12 = this.fPartialMultiByteChar[var14];
- case 3:
- --var14;
- var11 = this.fPartialMultiByteChar[var14];
- case 2:
- --var14;
- var10 = this.fPartialMultiByteChar[var14];
- case 1:
- --var14;
- var1 = this.fPartialMultiByteChar[var14];
- }
-
- label114:
- switch (var8) {
- case 1:
- if ((var10 & 192) != 128) {
- this.fErrorHandler.error2(57, this.fStringPool.addString(Integer.toHexString(var1)), this.fStringPool.addString(Integer.toHexString(var10)));
- }
- case 2:
- if ((var1 & 224) == 192) {
- switch (var9) {
- case 0:
- var5[var6++] = var1;
- if (var6 == var7) {
- int var19 = 2;
- this.fPartialMultiByteIn = var19;
- this.fPartialMultiByteOut = 1;
- --var19;
- this.fPartialMultiByteChar[var19] = var10;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- case 1:
- var5[var6++] = var10;
- if (var6 == var7) {
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- default:
- if (var8 < 2) {
- ++var3;
- if (var3 == var4) {
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- }
- }
- break label114;
- }
- } else {
- if (var8 < 2) {
- ++var3;
- if (var3 == var4) {
- int var15 = 2;
- this.fPartialMultiByteIn = var15;
- this.fPartialMultiByteOut = 0;
- --var15;
- this.fPartialMultiByteChar[var15] = var10;
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- }
-
- var11 = var2[var3];
- }
-
- if ((var11 & 192) != 128) {
- this.fErrorHandler.error3(58, this.fStringPool.addString(Integer.toHexString(var1)), this.fStringPool.addString(Integer.toHexString(var10)), this.fStringPool.addString(Integer.toHexString(var11)));
- }
- }
- case 3:
- if ((var1 & 240) == 224) {
- switch (var9) {
- case 0:
- var5[var6++] = var1;
- if (var6 == var7) {
- this.savePartialMultiByte(3, 1, var11, var10);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- case 1:
- var5[var6++] = var10;
- if (var6 == var7) {
- this.savePartialMultiByte(3, 2, var11, var10);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- case 2:
- var5[var6++] = var11;
- if (var6 == var7) {
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- default:
- if (var8 < 3) {
- ++var3;
- if (var3 == var4) {
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- }
- }
- break label114;
- }
- } else {
- if (var8 < 3) {
- if ((var1 & 248) != 240) {
- this.fErrorHandler.error1(56, this.fStringPool.addString(Integer.toHexString(var1)));
- }
-
- ++var3;
- if (var3 == var4) {
- this.savePartialMultiByte(3, 0, var11, var10);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- }
-
- var12 = var2[var3];
- }
-
- if ((var12 & 192) != 128) {
- this.fErrorHandler.error4(59, this.fStringPool.addString(Integer.toHexString(var1)), this.fStringPool.addString(Integer.toHexString(var10)), this.fStringPool.addString(Integer.toHexString(var11)), this.fStringPool.addString(Integer.toHexString(var12)));
- }
- }
- case 4:
- switch (var9) {
- case 0:
- var5[var6++] = var1;
- if (var6 == var7) {
- this.savePartialMultiByte(4, 1, var12, var11, var10);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- case 1:
- var5[var6++] = var10;
- if (var6 == var7) {
- this.savePartialMultiByte(4, 2, var12, var11, var10);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- case 2:
- var5[var6++] = var11;
- if (var6 == var7) {
- this.savePartialMultiByte(4, 3, var12, var11, var10);
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- case 3:
- var5[var6++] = var12;
- if (var6 == var7) {
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = false;
- return false;
- }
- default:
- if (var8 < 4) {
- ++var3;
- if (var3 == var4) {
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- this.fPartialMultiByteResult = true;
- return false;
- }
- }
- }
- }
-
- this.fOverflowOffset = var3;
- this.fOutputOffset = var6;
- return true;
- }
- }
- }
-